package com.example.magictowerx;

public class Task
{
    public static final String[][] recieveDialog = {
            //FIND_CROSS
            {"......",
                    "你醒了！",
                    "......\n你是谁？我在哪里？",
                    "我是这里的仙子，刚才你被小怪打晕了。",
                    "剑、剑、我的剑呢？",
                    "你的剑被他们抢走了，我只来得及救你出来。",
                    "那...公主呢？我是来救公主的。",
                    "公主还在里面呢，你这样进去是打不过里面的小怪的。",
                    "那我怎么办？我答应了国王一定要把公主救出来的，那我现在应该怎么办呢？",
                    "放心吧，我把我的力量借给你，你就可以打赢那些小怪。不过，你得先去帮我找一样东西，找到了再来这里找我。",
                    "找东西？找什么东西？",
                    "是一个十字架，中间有一颗红色的宝石。",
                    "那个东西有什么用吗？",
                    "我本来是这座塔的守护者，可不久前，从北方来了一批恶魔，他们占领了这座塔，并将我的魔力封在了这个十字架里面，如果你能将他带出塔来，那我的魔力便会慢慢的恢复，到那时候我便可以把力量借给你去救公主了。\n要记住：只有用我的魔力才能打开二十一层的门。",
                    "......\n好吧，我试试看！",
                    "刚才我去看过了，你的剑被放在三楼，你的盾在五楼上，而那个十字架被他们放了七楼，你得先取回你得剑和盾。\n另外，在塔里的其他楼层上，还有一些存放了好几百年的宝剑和宝物，如果你得到他们，对于你对付里面的怪物将有很大的帮助。",
                    "可是，我怎么进去呢？",
                    "我这里有三把钥匙，你先拿去，在塔里面还有很多这样的钥匙，你一定要珍惜使用。\n勇敢的去吧，勇士！"},
            //FIND_AX
            {"你得救啦！",
                    "啊，那正是太好了，我又快要在这里面寻宝了！\n哦，我还没有自我介绍，我叫杰克，是这附近有名的小偷，什么金银财宝我样样都偷过，不过这次运气可不是太好，刚进来就被抓了。现在你帮我打开了门，我就帮你做一件事吧。",
                    "快走吧，外面还有很多怪物，我可能顾不上你！",
                    "不、不、不会有事的。快说吧，叫我做什么？",
                    "......\n你会开门吗？",
                    "那当然！",
                    "那就请你帮我打开第二层的门吧！",
                    "那个简单，不过，如果你能帮我找到一把嵌了红宝石的铁锒头的话，我还帮你打通第十八层的路。",
                    "嵌了红宝石的铁锒头？好吧，我帮你找找！",
                    "非常的感谢，一会儿我便会将第二层的门打开。如果你找到那个铁锒头的话，还是来这里找我！"},
            //GET_QINGFEND_JIAN
            {"你已经得救了！",
                    "哦，是嘛，真实太感谢你了！我是个商人，不知道为什么被抓到这里来了。",
                    "快走吧！现在你已经自由了！",
                    "哦，对对对！我已经自由了。那这个东西就给你吧，我本来是准备卖钱的。相信它对你一定很有帮助！"},
            //GET_HUANGJIN_DUN
            {"你已经得救了！",
                    "哦，我的孩子，真实太感谢你了！这个地方又脏有坏，我真的是块呆不下去了！",
                    "快走吧，我还得就走被关在这里的公主。",
                    "哦，你是来救公主的，为了表示对你得感谢，这个东西就送给你吧，这还是我年轻的时候用过的呢！拿着它去解救公主吧！"},
            //GET_SHENGGUANG_JIAN
            {"你好，老人家！",
                    "你好，如果你有500点经验，我可以让你更强！",
                    "可是我现在没有啊。",
                    "很遗憾，等你有足够的经验时再来吧。"},
            //GET_XINGGUANG_DUN
            {"你好，老人家！",
                    "你好，如果你有800个金币，我可以让你更强！",
                    "可是我现在没有啊。",
                    "很遗憾，等你有足够的经验时再来吧。"},
            //RESCUE_PRINCESS
            {"公主！你得救了！",
                    "啊，你是来救我的吗？",
                    "是的，我奉国王的命令来救你的!请你快随我出去吧！",
                    "不，我还不想走！",
                    "为什么？这里面到处都是恶魔！",
                    "正是因为这里到处都是恶魔，所以才不可以就这样出去，我要看着那个恶魔被杀死！英雄的勇士，如果你们将那个大恶魔杀死，我就和你一起出去！",
                    "大恶魔！我已经杀死了一个魔王！",
                    "大恶魔在这个塔的最顶层，你杀死的可能是一个小队长之类的恶魔！",
                    "好，你等着，等我杀了那个恶魔再来这里找你！",
                    "大恶魔比你刚才杀死的厉害多了！而且他还会变身，变身后的魔王，他的攻击力和防御力都会提升至少一半以上，你得小心！请一定杀死大魔王！"},
            //FIGHT_BOSS
            {"大魔头，你得死期到了！",
                    "哈哈哈......\n你也真是有意思，别以为碟仙那家伙给了你力量你就可以打败我，想打败我你还早着呢！",
                    "废话少说，去死吧！",
                    "看不出来你还有两下子，有本领的话来21层！在那里，你就可以见到我真正的实力了！"}
    };
    public static final String[][] finishedDialog = {
            //FIND_CROSS
            {"仙子，我已经将那个十字架找到了！",
                    "你做的很好，那么现在我就开始授予你更强的力量！\n咪啦哆咪哗......\n好了我已经将你现在的能力提升了！记住：如果你没有足够的实力的话，不要去二十一层！在那一层里，你所有宝物的法力都将失去作用！"},
            //FIND_AX
            {"哈，快看，我找到什么了！",
                    "太好了，这个东西果然是在这里！好吧，我这就去帮你修好十八层的路面。"},
            //GET_QINGFEND_JIAN
            {"你得救了！",
                    "哦，谢谢你年轻人，为感谢你我送你一件宝物，它会增加你的攻击力！",
                    "谢谢你了老人家",
                    "不客气。"},
            //GET_HUANGJIN_DUN
            {"你得救了！",
                    "哦，谢谢你年轻人，为感谢你我送你一件宝物，它会增加你的防御力！",
                    "谢谢你了老人家",
                    "不客气。"},
            //GET_SHENGGUANG_JIAN
            {"你好，老人家！",
                    "你好，如果你有500点经验，我可以让你更强！",
                    "那好，我有足够的经验。",
                    "我会让你的攻击力增加110点。"},
            //GET_XINGGUANG_DUN
            {"你好，老人家！",
                    "你好，如果你有800个金币，我可以让你更强！",
                    "那好，我有足够的金币。",
                    "我会让你的防御力增加120点。"},
            //RESCUE_PRINCESS
            {"公主，我已经消灭了那个魔王！",
                    "好的。那我们回去吧，回去还得学习Android开发呢！"},
            //FIGHT_BOSS
            {"......，来受死吧！",
                    "你太天真了，就凭你的实力来打我还早呢！",
                    "我学习了很长时间的Android技术，你死定了！",
                    "好，来吧！"}
    };
    //hold the task state
    private static final int UNRECIEVE = 0,  //don't recieve task
            RECIEVED = 1,   //have recieved task,can't finish
            CANFINISH = 2,  //can finish task,but no finish
            FINISHED = 3;   //finished
    //hold the task type
    public static final int  FIND_CROSS = 0,
            FIND_AX = 1,
            GET_QINGFEND_JIAN = 2,
            GET_HUANGJIN_DUN = 3,
            GET_SHENGGUANG_JIAN = 4,
            GET_XINGGUANG_DUN = 5,
            RESCUE_PRINCESS = 6,
            FIGHT_BOSS = 7;

    private byte[] taskState =
            {
                    0, //0:find cross                      (7),
                    0, //1:find ax                         (12),
                    2, //2:get qingfeng jian--MAP_SWORD3   (2),
                    2, //3:get huangjin dun--MAP_SHIELD3   (2),
                    1, //4:get shengguang jian--MAP_SWORD4 (15),
                    1, //5:get xingguang dun MAP_SHIELD4   (15),
                    0, //6:rescue princess                 (18),
                    0  //7:fight boss                      (19),
            };
    private GameScreen gameScreen;
    private HeroSprite hero;
    private GameMap gameMap;
    public int curTask;
    public int curTask2;
    public boolean mbtask = false;

    public Task(GameScreen gameScreen,HeroSprite hero,GameMap gameMap)
    {
        this.gameScreen = gameScreen;
        this.hero = hero;
        this.gameMap = gameMap;
    }

    public void execTask(int curTask)
    {
        this.curTask = curTask;
        this.curTask2 = 0;
        switch (taskState[curTask])
        {
            case UNRECIEVE: //对话
                mbtask = false;
                gameScreen.mshowDialog = true;
                gameScreen.tu.InitText(recieveDialog[curTask][curTask2], 0, (MySet.SCREENH-MySet.MessageBoxH)/2, MySet.SCREENW, MySet.MessageBoxH, 0x0, 0xffff00, 255, MySet.TextSize);
                //gameScreen.dialog(recieveDialog[curTask]);
                recieveTask();
                break;
            case RECIEVED:
                if (curTask == GET_SHENGGUANG_JIAN)
                {
                    if (hero.getExperience() >= 500)
                    {
                        mbtask = true;
                        gameScreen.mshowDialog = true;
                        gameScreen.tu.InitText(finishedDialog[curTask][curTask2], 0, (MySet.SCREENH-MySet.MessageBoxH)/2, MySet.SCREENW, MySet.MessageBoxH, 0x0, 0xffff00, 255, MySet.TextSize);

                        //gameScreen.dialog(finishedDialog[curTask]);
                        finishTask();
                        hero.cutExperience(500);
                    }
                    else
                    {
                        mbtask = false;
                        gameScreen.mshowDialog = true;
                        gameScreen.tu.InitText(recieveDialog[curTask][curTask2], 0, (MySet.SCREENH-MySet.MessageBoxH)/2, MySet.SCREENW, MySet.MessageBoxH, 0x0, 0xffff00, 255, MySet.TextSize);
                        //gameScreen.dialog(recieveDialog[curTask]);
                        recieveTask();
                    }
                }
                else if (curTask == GET_XINGGUANG_DUN)
                {
                    if (hero.getMoney() >= 800)
                    {
                        mbtask = true;
                        gameScreen.mshowDialog = true;
                        gameScreen.tu.InitText(finishedDialog[curTask][curTask2], 0, (MySet.SCREENH-MySet.MessageBoxH)/2, MySet.SCREENW, MySet.MessageBoxH, 0x0, 0xffff00, 255, MySet.TextSize);
                        //gameScreen.dialog(finishedDialog[curTask]);
                        finishTask();
                        hero.cutMoney(800);
                    }
                    else
                    {
                        mbtask = false;
                        gameScreen.mshowDialog = true;
                        gameScreen.tu.InitText(recieveDialog[curTask][curTask2], 0, (MySet.SCREENH-MySet.MessageBoxH)/2, MySet.SCREENW, MySet.MessageBoxH, 0x0, 0xffff00, 255, MySet.TextSize);
                        //gameScreen.dialog(recieveDialog[curTask]);
                        recieveTask();
                    }
                }
                break;
            case CANFINISH:
                mbtask = true;
                gameScreen.mshowDialog = true;
                gameScreen.tu.InitText(finishedDialog[curTask][curTask2], 0, (MySet.SCREENH-MySet.MessageBoxH)/2, MySet.SCREENW, MySet.MessageBoxH, 0x0, 0xffff00, 255, MySet.TextSize);
                //gameScreen.dialog(finishedDialog[curTask]);
                finishTask();
                break;
            case FINISHED:
                break;
        }
    }

    private void recieveTask() //接收对话
    {
        taskState[curTask]++;
        switch (curTask)
        {
            case FIND_CROSS:
                gameMap.remove();
                gameMap.changeCell(92, GameMap.MAP_ANGLE);
                hero.addYellowKey();
                hero.addBlueKey();
                hero.addRedKey();
                break;
            case FIND_AX:
                gameMap.remove(2, 67);
                break;
            case GET_SHENGGUANG_JIAN:
                taskState[curTask]--;
                break;
            case GET_XINGGUANG_DUN:
                taskState[curTask]--;
                break;
            case RESCUE_PRINCESS:
                gameMap.changeCell(120, GameMap.MAP_UPSTAIR);
                break;
            case FIGHT_BOSS:
                gameMap.remove();
                taskState[curTask]++;
                break;
        }
    }
    private void finishTask()
    {
        taskState[curTask]++;
        switch (curTask)
        {
            case FIND_CROSS:
                hero.addHp(hero.getHp() / 3);
                hero.addAttack(hero.getAttack() / 3);
                hero.addDefend(hero.getDefend() / 3);
                break;
            case FIND_AX:
                gameMap.remove();
                gameMap.remove(18, 49, GameMap.MAP_PRINCESS);
                gameMap.remove(18, 60, GameMap.MAP_BARRIER);
                gameMap.remove(18, 71, GameMap.MAP_RED_DOOR);
                gameMap.remove(18, 82, GameMap.MAP_RED_DOOR);
                break;
            case GET_QINGFEND_JIAN:
                gameScreen.showMessage(hero.takeGem(GameMap.MAP_SWORD3));
                break;
            case GET_HUANGJIN_DUN:
                gameScreen.showMessage(hero.takeGem(GameMap.MAP_SHIELD3));
                break;
            case GET_SHENGGUANG_JIAN:
                gameScreen.showMessage(hero.takeGem(GameMap.MAP_SWORD4));
                break;
            case GET_XINGGUANG_DUN:
                gameScreen.showMessage(hero.takeGem(GameMap.MAP_SHIELD4));
                break;
            case RESCUE_PRINCESS:
                gameScreen.end();
                break;
            case FIGHT_BOSS:
                if (gameScreen.fight(GameMap.MAP_ORGE31) == true)
                {
                    gameMap.changeCell(81, GameMap.MAP_ROAD);
                    gameMap.changeCell(83, GameMap.MAP_ROAD);
                    taskState[RESCUE_PRINCESS]++;
                }
                break;
        }
    }

    public void updateTaskState(int type)
    {
        taskState[type] ++;
    }

    public byte[] getTask()
    {
        return taskState;
    }

    public void setTask(byte[] data)
    {
        taskState = data;
    }
}


